// 引入用户相关的model处理函数
let userModel = require('../model/userModel');

// 引入md5加密
const SALTOBJ = require('../config');

// 引入blueimp-md5用于md5加密
let md5 = require('blueimp-md5');

// 定义提交注册新用户的contriller函数
module.exports = {
    handlePostUser: (req, res) => {
        let newuser = req.body;
        // 在正式添加新用户之前，先得去数据库查找是否存在当前你正在注册的username，就得调用model中查找用户的方法
        userModel.getUserByName(newuser.username, (err, data) => {
            // 这是数据库错误
            if (err) return res.json({
                status: 0,
                msg: '查询数据库出错！'
            });
            // 这是查询到有数据，说明这个用户已存在，要返回错误提示信息
            if (data.length !== 0) return res.json({
                status: 0,
                msg: '用户名已存在,请换一个！'
            });
            // 在将新用户存入数据库之前，先对其密码进行md5加密，需要在md5加密
            newuser.password = md5(newuser.password, SALTOBJ.SALT);
            // 当没有错误之后，才能够去往数据库中添加数据
            userModel.addNewUser(newuser, (err, data) => {
                // 根据model中的查询结果，开始判断
                // 如果出错，就给前台返回一个段错误信息
                // 如果正确，就返回一段正确信息给前台
                if (err) return res.json({
                    status: 0,
                    msg: '操作数据库出错！'
                });
                if (data.affectedRows !== 0) {
                    res.json({
                        status: 1,
                        msg: '注册成功！'
                    });
                }
            });
        });
    },

    // 处理登录
    handleLogin: (req, res) => {
        let userobj = req.body;
        userobj.password = md5(userobj.password, SALTOBJ.SALT);
        // 利用model查询数据库
        userModel.checkLogin(userobj, (err, data) => {
            if (err) return res.json({
                status: 0,
                msg: '查询数据库出错！'
            });
            // 如果查询的数据长度为0，就说明没有找到该用户
            // 要么没注册，要么用户名密码错误
            if (data.length === 0) return res.json({
                status: 0,
                msg: '该用户未注册或者用户名密码错误!'
            });
            // 登录成功以后，我们需要用session保存用户的登录状态
            req.session.isLogin = true;
            // 除了登录状态以外，还应该把用户的信息传递保存起来
            req.session.user = data[0];
            res.json({
                status: 1,
                msg: '登录成功！'
            });
        });
    },

    // 定义退出登录的controller函数
    handleLogout: (req, res) => {
        // 清掉session(通过req.session.destroy()方法清除session),返回首页
        req.session.destroy(function (err) {
            if (err) throw err;
            // 返回首页直接通过res.redirect()这个方法实现，该方法参数中传一个路径就可以
            res.redirect('/');
        })
    }
};